/**
 * Trabalho 2 de Programacao Concorrente.
 * Prof. Dr. Julio Estrella
 * 
 * Determinacao da ocorrencia de palindromos e
 * calculo de numeros primos.
 * 
 * Grupo 07 - Turma B
 * Fabio de Albuquerque Dela Antonio 6792558
 * Leonardo Henrique Omoto 6793160
 * Pedro Paulo Canto Martucci 6793100
 * 
 * palindromo.c
 */

#include"../include/palindromo.h"

/* Verifica se o caractere é válido ou não (para separar frases) */
int isValid(char c) {
    return ( (c != '.') && (c != '?') && (c != '!') && (c != '\n') && (c != '\t') && (c != '\r') );
}

/* Verifica se uma determinada palavra ou frase é palindromo */
int verificaPalindromo(const char *str) {

    int tam = strlen(str); 
    int tamb = 0;
    
    int i, j = 0, count = 0;
    char *buffer;

    /* codigo para retirar os caracteres invalidos das frases */
    for(i = 0; i < tam && str[i] != '\0'; i++)
    {
        if(!isalnum(str[i]))
            count++;
        tamb++;
    }
    buffer = (char *) malloc((tamb-count)*sizeof(char)+1);
    
    for(i = 0; i < tamb; ++i)
    {
        if(isalnum(str[i]))
            buffer[j++] = str[i];   
    }  
    buffer[j] = '\0';
    tam = strlen(buffer);

    /* Decisoes de projeto:
     * Strings vazias -> Nao e palindromo.
     * Strings de um caractere -> Nao e palindromo. 
     */
    if(tam <= 1)
        return 0;
    
    /* verificacao de palindromo */
    j = tam - 1;
    for(i = 0; i < tam/2; ++i)
    {
        if(buffer[i] > 65 && buffer[i] < 90)
            buffer[i] += 32;
        if(buffer[j] > 65 && buffer[j] < 90)
            buffer[j] += 32; 
        if(buffer[i] == buffer[j])
            j--;
        else
            return 0;
    }
    
    free(buffer);

    return 1;
}
